package com.ruoyi.system.domain;


import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;

import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ExamPaperTitleItemObject {
    String name;

    List<SysQuestion> questionItems;

    public Long getQuestionCount() {
        return questionItems != null ? questionItems.size() : 0L;
    }

    public Long getScore() {
        if(questionItems != null){
            return questionItems.stream()
                    .mapToLong(question -> {
                        // 获取每个题目的选项列表
                        List<QuestionItemObject> options = question.getOptionJson();
                        if (options == null || options.isEmpty()) {
                            return 0L;
                        }
                        
                        // 根据题目类型计算分值
                        String questionType = question.getQuestionType();
                        if ("single".equals(questionType) || "true_or_false".equals(questionType)) {
                            // 单选题和判断题：取所有选项中的最大分值
                            return options.stream()
                                    .mapToLong(option -> option.getScore() != null ? option.getScore() : 0L)
                                    .max()
                                    .orElse(0L);
                        } else if ("multiple".equals(questionType)) {
                            // 多选题：所有选项分值之和（因为可能选择多个正确答案）
                            return options.stream()
                                    .mapToLong(option -> option.getScore() != null ? option.getScore() : 0L)
                                    .sum();
                        } else {
                            // 填空题、简答题等：取最大分值作为题目分值
                            return options.stream()
                                    .mapToLong(option -> option.getScore() != null ? option.getScore() : 0L)
                                    .max()
                                    .orElse(0L);
                        }
                    })
                    .sum();
        }
        return 0L;
    }

}
